# import numpy as np
# import matplotlib.pyplot as plt
#
# plt.rcParams['font.sans-serif'] = ['SimHei']
# plt.rcParams['axes.unicode_minus'] = False
#
# # 1. 准备数据
# score_ranges = ['80-90', '90-100', '100-110', '110-120', '120-130', '130-140', '140-150']
# students_count = [5, 8, 12, 10, 8, 5, 2]
#
# # 为每个区间创建代表性数据点
# data = []
# for i in range(len(score_ranges)):
#     # 每个区间的中点作为代表性分数
#     range_parts = score_ranges[i].split('-')
#     low = int(range_parts[0])
#     high = int(range_parts[1])
#     mid_point = (low + high) / 2
#
#     # 根据人数重复中点分数
#     data.extend([mid_point] * students_count[i])
#
# # 2. 创建画布
# plt.figure(figsize=(10, 6), dpi=100)
#
# # 3. 绘制直方图
# n, bins, patches = plt.hist(
#     data,
#     bins=7,  # 分箱数量对应7个成绩区间
#     density=False,  # 不归一化，显示实际人数
#     color='skyblue',  # 柱形颜色
#     alpha=0.7,  # 透明度
#     edgecolor='black',  # 柱形边框颜色
#     linewidth=0.5,  # 边框宽度
#     rwidth=0.9  # 柱与柱之间无间隔（设置柱宽为区间宽度的90%）
# )
#
# # 4. 设置属性
# plt.title('高一年级数学成绩分布直方图', fontsize=15)
# plt.xlabel('成绩区间', fontsize=12)
# plt.ylabel('人数', fontsize=12)
#
# # 设置x轴刻度标签
# plt.xticks(range(len(score_ranges)), score_ranges)
#
# # 添加网格
# plt.grid(axis='y', linestyle=':', alpha=0.7)
#
# # 5. 分析分布形态
# # 找出人数最多的区间（众数区间）
# max_count_index = np.argmax(students_count)
# most_concentrated_range = score_ranges[max_count_index]
# max_count = students_count[max_count_index]
#
# # 在图上标注最集中的区间
# plt.axvline(x=max_count_index, color='red', linestyle='--', alpha=0.8,
#             label=f'最集中区间: {most_concentrated_range}分 ({max_count}人)')
#
# plt.legend()
#
# # 6. 显示图表
# plt.tight_layout()
# plt.show()
#
# # 输出分析结果
# print("=== 成绩分布分析 ===")
# print(f"总人数: {sum(students_count)}人")
# print(f"成绩分布最集中的区间: {most_concentrated_range}分，有{max_count}人")
# print(f"分布形态: 成绩主要集中在100-110分区间，整体呈近似正态分布")

# import numpy as np
# import matplotlib.pyplot as plt
#
# plt.rcParams['font.sans-serif'] = ['SimHei']
# plt.rcParams['axes.unicode_minus'] = False
#
# # 1. 准备数据（多组对比示例）
# categories = ['一月', '二月', '三月', '四月', '五月']  # 类别
# data1 = [20, 35, 30, 35, 27]  # 第一组数据（如A产品销量）
# data2 = [25, 32, 34, 20, 25]  # 第二组数据（如B产品销量）
#
# x = np.arange(len(categories))  # 类别位置（0,1,2,3,4）
# width = 0.35  # 柱形宽度
#
# # 2. 创建画布
# plt.figure(figsize=(10, 6), dpi=100)
#
# # 3. 绘制柱状图
# rects1 = plt.bar(
#     x - width/2,  # 第一组柱形位置（左移width/2）
#     data1,
#     width,
#     label='A产品',
#     color='skyblue',
#     edgecolor='black'
# )
# rects2 = plt.bar(
#     x + width/2,  # 第二组柱形位置（右移width/2）
#     data2,
#     width,
#     label='B产品',
#     color='orange',
#     edgecolor='black'
# )
#
# # 4. 添加数据标签（在柱形顶部显示数值）
# def add_labels(rects):
#     for rect in rects:
#         height = rect.get_height()
#         plt.text(
#             rect.get_x() + rect.get_width()/2.,
#             height + 0.5,
#             f'{height}',
#             ha='center',
#             va='bottom',
#             fontsize=10
#         )
#
# add_labels(rects1)
# add_labels(rects2)
#
# plt.title('A、B产品月度销量对比', fontsize=15)
# plt.xlabel('月份', fontsize=12)
# plt.ylabel('销量（件）', fontsize=12)
# plt.xticks(x, categories)  # 设置x轴刻度为类别名称
# plt.ylim(0, 40)  # y轴范围
# plt.grid(axis='y', linestyle=':', alpha=0.7)
# plt.legend()
#
# plt.tight_layout()
# plt.show()

# import numpy as np
# import matplotlib.pyplot as plt
#
# # 设置中文字体支持
# plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体显示中文
# plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示为方块的问题
#
# # 1. 准备数据
# categories = ['门店A', '门店B', '门店C', '门店D']  # 门店类别 - X轴的标签
# april_data = [20, 18, 22, 15]  # 4月份各门店的营业额数据（万元）
# may_data = [25, 20, 23, 18]    # 5月份各门店的营业额数据（万元）
# june_data = [22, 21, 25, 20]   # 6月份各门店的营业额数据（万元）
#
# x = np.arange(len(categories))  # 门店位置数组 [0,1,2,3] - 用于确定柱状图在X轴的位置
# width = 0.25  # 柱形宽度 - 控制每个柱子的宽度，留出间距
#
# # 2. 创建画布
# plt.figure(figsize=(12, 8), dpi=100)  # 创建12×8英寸的画布，分辨率100DPI
#
# # 3. 绘制柱状图
# # 绘制4月份数据柱状图
# rects1 = plt.bar(
#     x - width,  # 4月柱形位置：每个门店位置向左偏移一个柱宽
#     april_data, # 4月份营业额数据
#     width,      # 柱子宽度
#     label='4月', # 图例标签
#     color='skyblue',  # 柱子颜色：天蓝色
#     edgecolor='black' # 边框颜色：黑色
# )
# # 绘制5月份数据柱状图
# rects2 = plt.bar(
#     x,          # 5月柱形位置：在每个门店的中心位置
#     may_data,   # 5月份营业额数据
#     width,      # 柱子宽度
#     label='5月', # 图例标签
#     color='lightgreen', # 柱子颜色：浅绿色
#     edgecolor='black'   # 边框颜色：黑色
# )
# # 绘制6月份数据柱状图
# rects3 = plt.bar(
#     x + width,  # 6月柱形位置：每个门店位置向右偏移一个柱宽
#     june_data,  # 6月份营业额数据
#     width,      # 柱子宽度
#     label='6月', # 图例标签
#     color='lightcoral', # 柱子颜色：浅珊瑚色
#     edgecolor='black'   # 边框颜色：黑色
# )
#
# # 4. 添加数据标签（在柱形顶部显示数值）
# def add_labels(rects):
#     """在柱子顶部添加数值标签的函数"""
#     for rect in rects:
#         height = rect.get_height()  # 获取柱子的高度（数值）
#         plt.text(
#             rect.get_x() + rect.get_width()/2.,  # X位置：柱子中心点
#             height + 0.3,                        # Y位置：柱子顶部上方0.3单位
#             f'{height}万',                       # 显示文本：数值+万
#             ha='center',     # 水平对齐：居中
#             va='bottom',     # 垂直对齐：底部对齐
#             fontsize=10      # 字体大小
#         )
#
# add_labels(rects1)  # 为4月份柱子添加标签
# add_labels(rects2)  # 为5月份柱子添加标签
# add_labels(rects3)  # 为6月份柱子添加标签
#
# # 5. 设置图表属性
# plt.title('超市各门店第二季度营业额柱状图', fontsize=16, fontweight='bold')  # 图表标题
# plt.xlabel('门店', fontsize=12)      # X轴标签
# plt.ylabel('营业额（万元）', fontsize=12)  # Y轴标签
# plt.xticks(x, categories)  # 设置X轴刻度位置和标签为门店名称
# plt.ylim(0, 30)  # 设置Y轴范围从0到30，确保所有数据都能显示且留出空间
# plt.grid(axis='y', linestyle=':', alpha=0.7)  # 添加Y轴网格线，虚线样式，半透明
# plt.legend()  # 显示图例，区分不同月份
#
# # 6. 添加分析标注
# plt.figtext(0.5, 0.01,  # 在画布底部居中位置添加文本
#            '分析：门店C整体营业额最高，各门店在第二季度均呈现增长趋势',
#            ha="center", fontsize=11,  # 水平居中，字体大小11
#            bbox=dict(boxstyle="round", facecolor="wheat", alpha=0.5))  # 圆角背景框，米色半透明
#
# plt.tight_layout(rect=[0, 0.05, 1, 0.95])  # 自动调整布局，为底部文本留出5%的空间
# plt.show()  # 显示图表
#
# total_revenue = [sum(april_data), sum(may_data), sum(june_data)]  # 计算每月总营业额
# print(f"4月总营业额: {total_revenue[0]}万元")  # 输出4月总营业额
# print(f"5月总营业额: {total_revenue[1]}万元")  # 输出5月总营业额
# print(f"6月总营业额: {total_revenue[2]}万元")  # 输出6月总营业额
# print(f"季度总营业额: {sum(total_revenue)}万元")  # 输出季度总营业额
# print(f"营业额最高的门店: 门店C (4月{april_data[2]}万, 5月{may_data[2]}万, 6月{june_data[2]}万)")  # 输出最佳门店
# print(f"增长最明显的门店: 门店D (从15万增长到20万)")  # 输出增长最明显门店

# import numpy as np
# import matplotlib.pyplot as plt
#
# plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体显示中文
# plt.rcParams['axes.unicode_minus'] = False
#
# # 1. 准备数据
# labels = ['拍照', '性能', '续航', '外观', '价格'] # 维度标签
# n = len(labels) # 维度数量
#
# # 两款手机的评分数据
# xiaomi_data = [8.5, 9.2, 7.8, 8.0, 7.5]  # 小米手机评分
# huawei_data = [7.8, 8.5, 8.2, 8.5, 8.0]  # 华为手机评分
#
# # 计算每个维度的角度（极坐标）
# angles = np.linspace(0, 2*np.pi, n, endpoint=False).tolist()
# # 闭合雷达图（首尾相连）
# xiaomi_data = xiaomi_data + [xiaomi_data[0]]
# huawei_data = huawei_data + [huawei_data[0]]
# angles = angles + [angles[0]]
# labels = labels + [labels[0]]
#
# # 2. 创建画布（极坐标）
# plt.figure(figsize=(10, 8), dpi=100)
# ax = plt.subplot(111, polar=True) # 设置为极坐标
#
# # 3. 绘制雷达图
# # 绘制小米手机雷达图
# ax.plot(angles, xiaomi_data, 'o-', linewidth=2.5, label='小米手机', color='#FF6B00', markersize=8)
# ax.fill(angles, xiaomi_data, alpha=0.3, color='#FF6B00') # 橙色填充
#
# # 绘制华为手机雷达图
# ax.plot(angles, huawei_data, 's-', linewidth=2.5, label='华为手机', color='#CF0A2C', markersize=8)
# ax.fill(angles, huawei_data, alpha=0.3, color='#CF0A2C') # 红色填充
#
# # 4. 设置属性
# ax.set_thetagrids(np.degrees(angles[:-1]), labels[:-1]) # 设置角度标签，去掉重复的最后一个
# ax.set_ylim(0, 10) # 设置数据范围0-10
# ax.set_yticks(np.arange(0, 11, 2)) # 设置Y轴刻度：0,2,4,6,8,10
#
# # 设置网格和背景
# ax.grid(True, linestyle='--', alpha=0.7)
# ax.set_facecolor('#f8f9fa')
#
# # 设置标题
# ax.set_title("两款手机各维度评分雷达图", fontsize=16, pad=30, fontweight='bold')
#
# # 设置图例
# plt.legend(loc='upper right', bbox_to_anchor=(1.2, 1.1), fontsize=12)
#
# # 5. 添加分析标注
# # 计算综合评分
# xiaomi_avg = np.mean(xiaomi_data[:-1])
# huawei_avg = np.mean(huawei_data[:-1])
#
# # 在图表下方添加分析文本
# plt.figtext(0.5, 0.02,
#            f'分析结果：小米手机平均分 {xiaomi_avg:.2f}分，华为手机平均分 {huawei_avg:.2f}分 | '
#            f'小米优势：拍照、性能 | 华为优势：续航、外观、价格',
#            ha="center", fontsize=11,
#            bbox=dict(boxstyle="round", facecolor="lightblue", alpha=0.7))
#
# plt.tight_layout(rect=[0, 0.05, 1, 0.95])
# plt.show()
#
# # 输出详细分析
# print("=== 两款手机详细对比分析 ===")
# print(f"小米手机综合评分: {xiaomi_avg:.2f}分")
# print(f"华为手机综合评分: {huawei_avg:.2f}分")
#
# for i, label in enumerate(labels[:-1]):
#     xiaomi_score = xiaomi_data[i]
#     huawei_score = huawei_data[i]
#     diff = xiaomi_score - huawei_score
#     if diff > 0:
#         advantage = f"小米领先 {diff:.1f}分"
#     elif diff < 0:
#         advantage = f"华为领先 {abs(diff):.1f}分"
#     else:
#         advantage = "持平"
#     print(f"{label}: 小米{xiaomi_score}分 vs 华为{huawei_score}分 → {advantage}")
#
# if xiaomi_avg > huawei_avg:
#     print(f"\n结论: 小米手机综合表现更优，领先{abs(xiaomi_avg-huawei_avg):.2f}分")
# elif xiaomi_avg < huawei_avg:
#     print(f"\n结论: 华为手机综合表现更优，领先{abs(xiaomi_avg-huawei_avg):.2f}分")
# else:
#     print(f"\n结论:两款手机综合表现一样")

# import numpy as np
# import matplotlib.pyplot as plt
#
#
# plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体显示中文
# plt.rcParams['axes.unicode_minus'] = False
# # 1. 准备数据（多组数据对比）
# np.random.seed(42)
# data = [
#     np.random.normal(0, 1, 100), # 正态分布1（均值0，标准差1）
#     np.random.normal(2, 1.5, 100), # 正态分布2（均值2，标准差1.5）
#     np.random.normal(-1, 0.8, 100) # 正态分布3（均值-1，标准差0.8）
# ]
# labels = ['组A', '组B', '组C'] # 数据组标签
#
# # 2. 创建画布
# plt.figure(figsize=(10, 6), dpi=100)
#
# # 3. 绘制箱线图
# box = plt.boxplot(
#     data,
#     labels=labels, # 各组标签
#     notch=True, # 是否显示中位数缺口（更直观展示中位数置信区间）
#     vert=True, # 是否垂直显示（False为水平）
#     patch_artist=True, # 是否填充箱体颜色
#     widths=0.6, # 箱体宽度
#     showfliers=True, # 是否显示异常值
#     flierprops=dict(marker='o', color='red', alpha=0.5), # 异常值样式
#     medianprops=dict(color='green', linewidth=2), # 中位数线样式
#     boxprops=dict(facecolor='skyblue', edgecolor='black'), # 箱体样式
#     capprops=dict(color='black'), # 箱线顶部/底部横线样式
#     whiskerprops=dict(color='black') # whisker线（箱线到最值的线）样式
# )
#
# # 4. 设置属性
# plt.title('三组数据分布对比（箱线图）', fontsize=15)
# plt.ylabel('数据值', fontsize=12)
# plt.grid(axis='y', linestyle=':', alpha=0.7)
#
# # 5. 显示图表
# plt.tight_layout()
# plt.show()

# import numpy as np
# import matplotlib.pyplot as plt
#
# # 设置中文字体
# plt.rcParams['font.sans-serif'] = ['SimHei']
# plt.rcParams['axes.unicode_minus'] = False
#
# # 1. 准备数据 - 直接使用给定的统计信息创建数据
# chinese_data = np.concatenate([
#     [90, 135],                    # 最小值和最大值
#     np.random.uniform(100, 120, 28),  # Q1-Q3之间的28个数据点
#     [110]                         # 中位数附近数据点
# ])
# math_data = np.concatenate([
#     [85, 140],                    # 最小值和最大值
#     np.random.uniform(95, 125, 27),  # Q1-Q3之间的27个数据点
#     [115, 145]                    # 中位数和异常值
# ])
# english_data = np.concatenate([
#     [80, 130],                    # 最小值和最大值
#     np.random.uniform(90, 115, 28),  # Q1-Q3之间的28个数据点
#     [105]                         # 中位数附近数据点
# ])
# data = [chinese_data, math_data, english_data]  # 三科数据列表
# labels = ['语文', '数学', '英语']                # x轴标签
#
# # 2. 创建画布
# plt.figure(figsize=(10, 6), dpi=100)
#
# # 3. 绘制箱线图
# box = plt.boxplot(
#     data,
#     tick_labels=labels,       # 修正：labels改为tick_labels
#     notch=True,              # 显示中位数置信区间缺口
#     patch_artist=True,       # 填充箱体颜色
#     showfliers=True,         # 显示异常值
#     flierprops=dict(marker='o', color='red', markersize=6),  # 异常值红色圆点
#     medianprops=dict(color='green', linewidth=2),            # 中位数绿色线
#     boxprops=dict(facecolor='lightblue', edgecolor='black')  # 箱体样式
# )
#
# # 4. 设置图表属性
# plt.title('语文、数学、英语成绩箱线图', fontsize=14)  # 图表标题
# plt.xlabel('科目', fontsize=12)                     # x轴标签
# plt.ylabel('成绩（分）', fontsize=12)                # y轴标签
# plt.ylim(70, 150)                                  # y轴范围
# plt.grid(axis='y', linestyle=':', alpha=0.5)       # 添加y轴网格线
#
# # 5. 显示图表
# plt.tight_layout()
# plt.show()

# import jieba
# from wordcloud import WordCloud
# import matplotlib.pyplot as plt
#
# # 设置中文字体
# plt.rcParams['font.sans-serif'] = ['SimHei']
# plt.rcParams['axes.unicode_minus'] = False
#
#
# # 中文词云示例（需分词+指定中文字体）
# def chinese_wordcloud_demo():
#     # 中文文本内容
#     chinese_text = """Python是一种流行的编程语言。它被广泛应用于Web开发、数据科学、人工智能等领域。Python以其简洁性和可读性著称，许多初学者选择Python作为入门语言，因为它的语法容易理解。学习Python可以帮助你快速开发各种应用程序，从简单脚本到大型项目。"""
#
#     # 中文分词（英文无需此步骤，中文必须分词才能正确识别词语）
#     seg_list = jieba.cut(chinese_text, cut_all=False)  # 精确模式分词
#     seg_text = " ".join(seg_list)  # 用空格连接分词结果（wordcloud需空格分隔的词语）
#
#     # 中文字体路径（必须指定，否则中文会乱码，根据系统修改）
#     # Windows系统示例：C:/Windows/Fonts/simhei.ttf（黑体）
#     # Mac系统示例：/Library/Fonts/PingFang.ttc（苹方）
#     # Linux系统示例：/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc
#     font_path = "C:/Windows/Fonts/simhei.ttf"  # 请替换为你的系统中文字体路径
#
#     # 创建中文词云对象
#     wc = WordCloud(
#         font_path=font_path,  # 关键：指定中文字体
#         background_color="white",
#         width=800,
#         height=600,
#         max_words=100,
#         stopwords={"的", "是", "可以", "一种"}  # 过滤停用词（可选）
#     ).generate(seg_text)
#
#     # 显示词云
#     plt.figure(figsize=(10, 8))
#     plt.imshow(wc)
#     plt.axis("off")
#     plt.title("中文词云示例")
#     plt.show()
#
#
# # 调用函数
# chinese_wordcloud_demo()

from wordcloud import WordCloud
import matplotlib.pyplot as plt
import jieba
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]
plt.rcParams["axes.unicode_minus"] = False

# 移除了多余的 def 行

def chinese_word_cloud_demo():
    chinese_text = """Python是一种流行的编程语言。它被广泛应用于Web开发、数据科学、
人工智能等领域。Python以其简洁性和可读性著称，许多初学者选择Python作为入门语言，
因为它的语法容易理解。学习Python可以帮助你快速开发各种应用程序，从简单脚本到大型项目。"""

    seg_list = jieba.cut(chinese_text, cut_all=False)
    seg_text = " ".join(seg_list)

    # 中文字体路径（根据系统修改）
    font_path = "C:\\WINDOWS\\Fonts\\MSYH.TTC"

    # 创建中文词云对象
    wc = WordCloud(
        font_path=font_path,
        background_color="white",
        width=800,
        height=600,
        max_words=100,
        stopwords={"的", "是", "可以", "一种"}
    ).generate(seg_text)

    # 显示词云
    plt.figure(figsize=(10, 8))
    plt.imshow(wc)
    plt.axis("off")
    plt.title("中文词云示例")
    plt.show()

# 调用函数
chinese_word_cloud_demo()